#pragma once

#include <cmath>
#include <map>
#include <string>
#include <iostream>
#include <map>

#include "var.h"

enum SubXMathExpType{SMET_INT, SMET_FLOAT, SMET_ERROR, SMET_MAX};
enum SubXMathNodeType{SMNT};

class xMathExpResult
{
  SubXMathExpType t;
  void* val;//on ne sait pas le type a l'avance, alors
  //on le store dans t, et on pointe vers un void.
};

struct absXMathNode
{
	absXMathNode *parentNode, *childNode1, *childNode2;
};

struct absXMathTree
{
	absXMathNode *masterNode;
	int depth;
};

/* Evalue l'expression mathematique exp. Utilise les variables de la map v */
xMathExpResult *evalXMathExp(std::string exp, std::map<std::string, Variable*> *v);
